home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / parser.jar / com / sun / xml / parser / ValidatingParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-02-23  |  4.6 KB  |  178 lines

  1. package com.sun.xml.parser;
  2.  
  3. import com.sun.xml.util.XmlNames;
  4. import java.util.Enumeration;
  5. import java.util.StringTokenizer;
  6. import org.xml.sax.SAXException;
  7.  
  8. public class ValidatingParser extends Parser {
  9.    private SimpleHashtable ids;
  10.    private final EmptyValidator EMPTY;
  11.  
  12.    public ValidatingParser() {
  13.       this.ids = new SimpleHashtable();
  14.       this.EMPTY = new EmptyValidator(this);
  15.       ((Parser)this).setIsValidating(true);
  16.    }
  17.  
  18.    public ValidatingParser(boolean var1) {
  19.       this();
  20.       if (var1) {
  21.          ((Parser)this).setErrorHandler(new 1());
  22.       }
  23.  
  24.    }
  25.  
  26.    void afterDocument() {
  27.       this.ids.clear();
  28.    }
  29.  
  30.    void afterRoot() throws SAXException {
  31.       Enumeration var1 = this.ids.keys();
  32.  
  33.       while(var1.hasMoreElements()) {
  34.          String var2 = (String)var1.nextElement();
  35.          Boolean var3 = (Boolean)this.ids.get(var2);
  36.          if (Boolean.FALSE == var3) {
  37.             ((Parser)this).error("V-024", new Object[]{var2});
  38.          }
  39.       }
  40.  
  41.    }
  42.  
  43.    private boolean isUnparsedEntity(String var1) {
  44.       Object var2 = super.entities.getNonInterned(var1);
  45.       if (var2 != null && var2 instanceof ExternalEntity) {
  46.          return ((ExternalEntity)var2).notation != null;
  47.       } else {
  48.          return false;
  49.       }
  50.    }
  51.  
  52.    ContentModel newContentModel(char var1, ContentModel var2) {
  53.       return new ContentModel(var1, var2);
  54.    }
  55.  
  56.    ContentModel newContentModel(String var1) {
  57.       return new ContentModel(var1);
  58.    }
  59.  
  60.    ElementValidator newValidator(ElementDecl var1) {
  61.       if (var1.validator != null) {
  62.          return var1.validator;
  63.       } else if (var1.model != null) {
  64.          return new ChildrenValidator(this, var1);
  65.       } else {
  66.          if (var1.contentType != null && var1.contentType != "ANY") {
  67.             if (var1.contentType == "EMPTY") {
  68.                var1.validator = this.EMPTY;
  69.             } else {
  70.                var1.validator = new MixedValidator(this, var1);
  71.             }
  72.          } else {
  73.             var1.validator = ElementValidator.ANY;
  74.          }
  75.  
  76.          return var1.validator;
  77.       }
  78.    }
  79.  
  80.    void validateAttributeSyntax(AttributeDecl var1, String var2) throws SAXException {
  81.       if (var1.type == "ID") {
  82.          if (!XmlNames.isName(var2)) {
  83.             ((Parser)this).error("V-025", new Object[]{var2});
  84.          }
  85.  
  86.          Boolean var3 = (Boolean)this.ids.getNonInterned(var2);
  87.          if (var3 != null && !var3.equals(Boolean.FALSE)) {
  88.             ((Parser)this).error("V-026", new Object[]{var2});
  89.          } else {
  90.             this.ids.put(var2.intern(), Boolean.TRUE);
  91.          }
  92.       } else if (var1.type == "IDREF") {
  93.          if (!XmlNames.isName(var2)) {
  94.             ((Parser)this).error("V-027", new Object[]{var2});
  95.          }
  96.  
  97.          Boolean var9 = (Boolean)this.ids.getNonInterned(var2);
  98.          if (var9 == null) {
  99.             this.ids.put(var2.intern(), Boolean.FALSE);
  100.          }
  101.       } else if (var1.type == "IDREFS") {
  102.          StringTokenizer var10 = new StringTokenizer(var2);
  103.  
  104.          boolean var5;
  105.          for(var5 = false; var10.hasMoreTokens(); var5 = true) {
  106.             var2 = var10.nextToken();
  107.             if (!XmlNames.isName(var2)) {
  108.                ((Parser)this).error("V-027", new Object[]{var2});
  109.             }
  110.  
  111.             Boolean var4 = (Boolean)this.ids.getNonInterned(var2);
  112.             if (var4 == null) {
  113.                this.ids.put(var2.intern(), Boolean.FALSE);
  114.             }
  115.          }
  116.  
  117.          if (!var5) {
  118.             ((Parser)this).error("V-039", (Object[])null);
  119.          }
  120.       } else if (var1.type == "NMTOKEN") {
  121.          if (!XmlNames.isNmtoken(var2)) {
  122.             ((Parser)this).error("V-028", new Object[]{var2});
  123.          }
  124.       } else if (var1.type == "NMTOKENS") {
  125.          StringTokenizer var11 = new StringTokenizer(var2);
  126.  
  127.          boolean var15;
  128.          for(var15 = false; var11.hasMoreTokens(); var15 = true) {
  129.             var2 = var11.nextToken();
  130.             if (!XmlNames.isNmtoken(var2)) {
  131.                ((Parser)this).error("V-028", new Object[]{var2});
  132.             }
  133.          }
  134.  
  135.          if (!var15) {
  136.             ((Parser)this).error("V-032", (Object[])null);
  137.          }
  138.       } else if (var1.type == "ENUMERATION") {
  139.          for(int var12 = 0; var12 < var1.values.length; ++var12) {
  140.             if (var2.equals(var1.values[var12])) {
  141.                return;
  142.             }
  143.          }
  144.  
  145.          ((Parser)this).error("V-029", new Object[]{var2});
  146.       } else if (var1.type == "NOTATION") {
  147.          for(int var13 = 0; var13 < var1.values.length; ++var13) {
  148.             if (var2.equals(var1.values[var13])) {
  149.                return;
  150.             }
  151.          }
  152.  
  153.          ((Parser)this).error("V-030", new Object[]{var2});
  154.       } else if (var1.type == "ENTITY") {
  155.          if (!this.isUnparsedEntity(var2)) {
  156.             ((Parser)this).error("V-031", new Object[]{var2});
  157.          }
  158.       } else if (var1.type == "ENTITIES") {
  159.          StringTokenizer var14 = new StringTokenizer(var2);
  160.  
  161.          boolean var16;
  162.          for(var16 = false; var14.hasMoreTokens(); var16 = true) {
  163.             var2 = var14.nextToken();
  164.             if (!this.isUnparsedEntity(var2)) {
  165.                ((Parser)this).error("V-031", new Object[]{var2});
  166.             }
  167.          }
  168.  
  169.          if (!var16) {
  170.             ((Parser)this).error("V-040", (Object[])null);
  171.          }
  172.       } else if (var1.type != "CDATA") {
  173.          throw new InternalError(var1.type);
  174.       }
  175.  
  176.    }
  177. }
  178.